package com.ms.common.config;

import java.util.Date;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.jfinal.core.JFinal;
import com.jfinal.kit.Prop;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.c3p0.C3p0Plugin;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.weixin.sdk.api.ApiConfig;
import com.jfinal.weixin.sdk.api.ApiConfigKit;
import com.ms.common.model.OutOrder;
import com.ms.common.model._MappingKit;
import com.ms.common.util.DateUtils;
import com.ms.common.util.MsUtility;

/**
 * API引导式配置
 */
public class MSBasicConfig extends JFinalConfig {
	public static String qrPath;
	public static Map<String, Integer> codeMap = new ConcurrentHashMap<String, Integer>();
	
	/**
	 * 配置常量
	 */
	public void configConstant(Constants me) {
		// 加载少量必要配置，随后可用PropKit.get(...)获取值
		PropKit.use("a_little_config.txt");
		me.setDevMode(true);
		String osName=System.getProperties().getProperty("os.name");//windows 8
		if("Linux".equals(osName)){
			qrPath=PropKit.get("qr_linux");
		}else{
			qrPath=PropKit.get("qrPath");
		}
		me.setError404View("/commons/404.html");
		me.setError500View("/commons/500.html");
		
	}
	
	/**
	 * 配置路由
	 */
	public void configRoute(Routes me) {
		_BaseRoute.route(me);
	}
	
	public static C3p0Plugin createC3p0Plugin() {
		return new C3p0Plugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password").trim());
	}
	
	/**
	 * 配置插件
	 */
	public void configPlugin(Plugins me) {
		// 配置C3p0数据库连接池插件
	//	C3p0Plugin C3p0Plugin = createC3p0Plugin();
		DruidPlugin C3p0Plugin=createDruidPlugin("a_little_config.txt");
		me.add(C3p0Plugin);
		// 配置ActiveRecord插件
		ActiveRecordPlugin arp = new ActiveRecordPlugin(C3p0Plugin);
		me.add(arp);
		arp.setShowSql(true);
		// 所有配置在 MappingKit 中搞定
		_MappingKit.mapping(arp);
	        
	}
	
	public static DruidPlugin createDruidPlugin(String fileName){
			Prop pk=PropKit.use(fileName);
		return new DruidPlugin(pk.get("jdbcUrl"), pk.get("user"), pk.get("password").trim(), pk.get("driver").trim());
	}
	
	/**
	 * 配置全局拦截器
	 */
	public void configInterceptor(Interceptors me) {
		
	}
	
	/**
	 * 配置处理器
	 */
	public void configHandler(Handlers me) {
		
	}
	
	public void afterJFinalStart() {

		ApiConfig ac = new ApiConfig();
		// 配置微信 API 相关参数
		ac.setToken(PropKit.get("token"));
		ac.setAppId(PropKit.get("appId"));
		ac.setAppSecret(PropKit.get("appSecret"));

		/**
		 *  是否对消息进行加密，对应于微信平台的消息加解密方式：
		 *  1：true进行加密且必须配置 encodingAesKey
		 *  2：false采用明文模式，同时也支持混合模式
		 */
		ac.setEncryptMessage(PropKit.getBoolean("encryptMessage", false));
		ac.setEncodingAesKey(PropKit.get("encodingAesKey", "setting it in config file"));

		/**
		 * 多个公众号时，重复调用ApiConfigKit.putApiConfig(ac)依次添加即可，第一个添加的是默认。
		 */
		ApiConfigKit.putApiConfig(ac);
		
		
		/**
		 * 启动成功后给map增加合适的key
		 */
		OutOrder or=OutOrder.dao.findFirst("SELECT * FROM out_order where id =(select max(id) from out_order)");
		if(or!=null){
			String code=or.getOrderCode();
			String  nowDay=DateUtils.getCurrentDateTimeCode();
			if(or.getCreateDate().getTime()<MsUtility.getStartTime()){ //如果创建时间小于今天
				codeMap.put(nowDay, 1);
			}else{
				int currSeq=Integer.parseInt(code.substring(code.length()-3));
				codeMap.put(nowDay, currSeq);
			}
			
			
			
		}
	}
	
	
	/**
	 * 建议使用 JFinal 手册推荐的方式启动项目
	 * 运行此 main 方法可以启动项目，此main方法可以放置在任意的Class类定义中，不一定要放于此
	 */
	public static void main(String[] args) {
		JFinal.start("src/main/webapp", 8088, "/erpBase", 5);
	}
}
